<!DOCTYPE html>
<html>
<head>
    <script src="../../resources/js-test.js"></script>
    <script>
        var a;
        var b;

        function testElements(_a, _b) {
            a = _a;
            b = _b;

            shouldBe('a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_DISCONNECTED', 'Node.DOCUMENT_POSITION_DISCONNECTED');
            shouldBe('b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_DISCONNECTED', 'Node.DOCUMENT_POSITION_DISCONNECTED');
            shouldBe('a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC', 'Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC');
            shouldBe('b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC', 'Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC');
            shouldNotBe('a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_PRECEDING', 'b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING');
            shouldNotBe('a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING', 'b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_FOLLOWING');
            shouldBeNonZero('a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_PRECEDING || a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING');
            shouldBeNonZero('b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING || b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_FOLLOWING');
            // Make sure the returned result is consistent.
            shouldBe('a.compareDocumentPosition(b)', 'a.compareDocumentPosition(b)');
            shouldBe('b.compareDocumentPosition(a)', 'b.compareDocumentPosition(a)');
        }

        debug("* Test with 2 disconnected elements");
        testElements(document.createElement('a'), document.createElement('b'));
        debug("* Test with document and a disconnected element");
        testElements(document, document.createElement('b'));
        debug("* Test with document and a disconnected attribute");
        testElements(document, document.createAttribute('b'));
        debug("* Test with 2 disconnected attributes");
        testElements(document.createAttribute("a"), document.createAttribute("b"));
        debug("* Test with disconnected attribute and element");
        testElements(document.createAttribute("a"), document.createElement("b"));
    </script>
</head>
<body>
    <p>Comparing the positions of two disconnected nodes should result in DOCUMENT_POSITION_DISCONNECTED.</p>
</body>
</html>
